﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace iNet.Media
{
	/// <summary>
	/// 媒體解碼失敗時所擲出的例外。
	/// </summary>
	public class MediaDecodeFailedException : Exception
	{
		#region 欄位
		MediaDecodeFailedReason _Reason;
		#endregion
		#region 建構子
		/// <summary>
		/// 初始化新的 MediaDecodeFailedException 執行個體。
		/// </summary>
		/// <param name="reason">解碼失敗的原因。</param>
		public MediaDecodeFailedException(MediaDecodeFailedReason reason)
			: this(reason, null)
		{ }
		/// <summary>
		/// 初始化新的 MediaDecodeFailedException 執行個體。
		/// </summary>
		/// <param name="reason">解碼失敗的原因。</param>
		/// <param name="innerException">內部例外狀況。</param>
		public MediaDecodeFailedException(MediaDecodeFailedReason reason, Exception innerException)
			: this(reason, innerException, reason.ToString())
		{ }
		/// <summary>
		/// 初始化新的 MediaDecodeFailedException 執行個體。
		/// </summary>
		/// <param name="reason">解碼失敗的原因。</param>
		/// <param name="innerException">內部例外狀況。</param>
		/// <param name="message">例外訊息。</param>
		public MediaDecodeFailedException(MediaDecodeFailedReason reason, Exception innerException, string message)
			: base(message, innerException)
		{
			_Reason = reason;
		}
		#endregion
		#region Reason
		/// <summary>
		/// 取得解碼失敗的原因。
		/// </summary>
		public MediaDecodeFailedReason Reason
		{
			get
			{
				return _Reason;
			}
		}
		#endregion
	}
	#region MediaDecodeFailedReason
	/// <summary>
	/// 表示媒體解碼失敗的原因。
	/// </summary>
	public enum MediaDecodeFailedReason
	{
		/// <summary>
		/// 未知的原因。
		/// </summary>
		Unknown,
		/// <summary>
		/// 無法存取媒體資料流。
		/// </summary>
		CannotAccessStream,
		/// <summary>
		/// 無效的媒體資料格式。
		/// </summary>
		InvalidFormat,
	}
	#endregion
}
